scrapbox-bundlerのimport map解決方法
scrapbox-bundlerのimport map及びexternal (scrapbox-bundler)によるbundle除外項目のURL解決方法メモ
import mapの仕様は/icons/github.iconWICG/import-mapsに準拠する
deno_x/importmapの仕様がこれに準拠していない気がするので、自前で解決algorithmを作るつもり
https://github.com/WICG/import-maps/tree/main/reference-implementation をDenoに移植すればいい
いやもしかしたらあってるのか?
わからんtakker.icon
採用する解決手順
前処理
externalの相対URLを絶対URLに直す
bare module spesifierはそのままにする
1. pathとimporterを組み合わせてresourceの絶対URLを作る
bare moduleの場合はそのまま
2. deno_x/importmapを使ってresourceのpathを変換する
3. 解決結果を返す
URLの場合
URLを返す
redirectが必要な場合は、redirect解決函数redirect()を使って変換したURLを返す
CORS制限のないURLの場合
そのままfetch()を実行してredirect後のURLを取得する
fetch()した内容はcacheに保存しておく
CORS制限つきURLの場合
個別にclient側で対処するしかない
さしあたり現状で実装しているpax.deno.devとdeno.landだけ対応することにする
他のドメインへの対応が必要な場合は、別途PRを作って対処する
bare moduleもしくはexternalで指定されたpathの場合
{external: true, path: "..."}を返す
/icons/hr.icon
解決の順序
1. import mapにCORS回避用URL変換処理 (scrapbox-bundler)をかける
keyの方のみ
valueはいじらない
2. externalがあれば、それにもCORS回避用URL変換処理 (scrapbox-bundler)をかけておく
3. 解決対象のpathを絶対URLに変換する
単にimporterと統合するだけ
bare module nameだった場合はそのままにする
4. import mapでpathを変換する
5. externalで指定されたpathをskipする
この段階でもbare module nameだったpathもskipする
6. pathを読み込み対象として登録する
CORS回避用URL変換処理 (scrapbox-bundler)とscrapbox-proxyとを分けるべきでは?
CORS回避用URL変換処理 (scrapbox-bundler)で変換するpax.deno.devなどのURLは、redirect先URLに差し替えている
これって、redirect先URLをimport mapによる書き換え対象とすべき?それともredirect元URLの方を書き換え対象とすべき?
どっちも書き換えたいかなtakker.icon
一方でscrapbox-proxyはURLを変える意図はない
単にresourceの取得先を切り替えているだけ
URLは書き換えないべきだろう
#2021-12-06 12:57:24
#2021-12-05 09:07:15
#2021-11-29 22:46:38